<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>有序数组的平方</title>
</head>
<body>
     <!-- 输出：[0,1,9,16,100]  -->
     <div>题目:给你一个按 非递减顺序 排序的整数数组 nums，<br>
        返回 每个数字的平方 组成的新数组，要求也按 非递减顺序 排序。
    </div>
    <br>
    <div id="nums"></div>
    <button onclick="square()">结果</button>
    <div id="result"></div>

    <script>
        let nums = [-4,-1,0,3,10];
        let num = document.getElementById("nums");
        num.innerHTML = "数组为:["+nums+"]";

        var square = function() {
            // 双指针
            // 思路:数组按顺序排列,平方后最大的数字在数组的或头或尾;
            // 设定两个指针,一个在数组开头,一个在数组结尾;并创建一个新的数组,长度与原来数组一样;
            // 对两个数字平方后比较大小,较大的放在新数组的最后一个,并将该指针移动一位;
            // 让下一位数字与刚才剩下的数字比较,直到全部比较完.

            // 1.确定两个指针,一头一尾
            let l = nums.length; 
            // console.log(l)
            let i=0;
            // 数组长度比下标大1;所以-1;
            let j = l-1;
            // console.log(nums[j]);


            // 2.创建等长度的新数组
            let k=nums.length-1;
            // console.log(k)
            var result = new Array(k);
            // console.log(result)

            // 3.判断大小
            // 只进行了一次,缺少循环
        //     if(nums[i]*nums[i]<nums[j]*nums[j]) {
        //         // console.log(nums[j]*nums[j]);
        //         result[k] = nums[j]*nums[j];
        //         console.log(result[k]);
        //         k--;
        //         j--;
        //     }
        //     else {
        //         result[k] = nums[i]*nums[i];
        //         k--;i++;
        //         console.log(result[k])
        //     }
        // 每次新数组对应位置赋值后将下标前移一位
            while(i<=j) {
                if(nums[i]*nums[i]<nums[j]*nums[j]) {
                        // console.log(nums[i]*nums[i],nums[j]*nums[j]);
                    result[k] = nums[j]*nums[j];
                        // console.log(result[k]);
                    k--;
                    j--;
                    
                }
                else {
                    // console.log(nums[i]*nums[i],nums[j]*nums[j]);
                    result[k] = nums[i]*nums[i];
                    // console.log(nums[i]*nums[i])
                    // console.log(result[k]);
                    k--;i++;
                }
                // console.log(k,j)
            }
            // console.log(result)
            let r = document.getElementById("result");
        r.innerHTML = "平方后排序为:["+result+"]";
    }
    </script>
</body>
</html>